<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 构造函数Person 
        // 用于创建对象的,构造函数预先定义了一个对象应该有的结构
        function Person(name, age, gender) {
            this.name = name
            this.age = age
            this.gender = gender
        }
        Person.prototype.$http = "axios"
        
        var xm = new Person('小明',12,'女')
        // 每一个new出来的对象 我们都可以称为是这个构造函数的实例
        // xm就是Prerson的实例对象
        console.log(xm)  // { constructor:Person } constructor中文含义构造器
        var jujie = new Person('菊姐',32,'女')
        console.log(jujie)
        console.dir(Person)


        console.log(xm.__proto__.$http)
        // 可以优化为 实例对象在访问自身属性的时候 会先在自己拥有的属性上查找 找到了就返回 找不到就去__proto__上找
        // __proto__就是 实例的原型 它与创建该实例的 构造函数的原型protoype是同一个东西 他们在内存中指向同一个区域
        console.log(xm.$http)
        // 实例对象身上的__proto__属性 等于 该实例构造函数的 prototype 属性
        // 我如果在构造函数的Prototype属性上 进行一些扩展 那么这些扩展就可以被这个构造函数所有的实例访问到
    </script>
</body>

</html>